/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package DAOs;

import DAOs.exceptions.NonexistentEntityException;
import DAOs.exceptions.PreexistingEntityException;
import VO.Pagos;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import VO.Empresas;
import VO.Estado;
import VO.Tipopago;

/**
 *
 * @author Julian
 */
public class PagosJpaController {

    public PagosJpaController() {
        
    }
    

    public void create(Pagos pagos,EntityManager em1) throws PreexistingEntityException, Exception {
        EntityManager em = null;
        try {
            em = em1;
            //em.getTransaction().begin();
            Empresas idEmpresas = pagos.getIdEmpresas();
            if (idEmpresas != null) {
                idEmpresas = em.getReference(idEmpresas.getClass(), idEmpresas.getIdEmpresas());
                pagos.setIdEmpresas(idEmpresas);
            }
            Estado idEstado = pagos.getIdEstado();
            if (idEstado != null) {
                idEstado = em.getReference(idEstado.getClass(), idEstado.getIdEstado());
                pagos.setIdEstado(idEstado);
            }
            Tipopago idTipoPago = pagos.getIdTipoPago();
            if (idTipoPago != null) {
                idTipoPago = em.getReference(idTipoPago.getClass(), idTipoPago.getIdtipoPago());
                pagos.setIdTipoPago(idTipoPago);
            }
            em.persist(pagos);
            if (idEmpresas != null) {
                idEmpresas.getPagosCollection().add(pagos);
                idEmpresas = em.merge(idEmpresas);
            }
            if (idEstado != null) {
                idEstado.getPagosCollection().add(pagos);
                idEstado = em.merge(idEstado);
            }
            if (idTipoPago != null) {
                idTipoPago.getPagosCollection().add(pagos);
                idTipoPago = em.merge(idTipoPago);
            }
            //em.getTransaction().commit();
        } catch (Exception ex) {
            if (findPagos(pagos.getIdPago(),em) != null) {
                throw new PreexistingEntityException("Pagos " + pagos + " already exists.", ex);
            }
            throw ex;
        } 
    }

    public void edit(Pagos pagos,EntityManager em1) throws NonexistentEntityException, Exception {
        EntityManager em = null;
        try {
            em = em1;
            //em.getTransaction().begin();
            Pagos persistentPagos = em.find(Pagos.class, pagos.getIdPago());
            Empresas idEmpresasOld = persistentPagos.getIdEmpresas();
            Empresas idEmpresasNew = pagos.getIdEmpresas();
            Estado idEstadoOld = persistentPagos.getIdEstado();
            Estado idEstadoNew = pagos.getIdEstado();
            Tipopago idTipoPagoOld = persistentPagos.getIdTipoPago();
            Tipopago idTipoPagoNew = pagos.getIdTipoPago();
            if (idEmpresasNew != null) {
                idEmpresasNew = em.getReference(idEmpresasNew.getClass(), idEmpresasNew.getIdEmpresas());
                pagos.setIdEmpresas(idEmpresasNew);
            }
            if (idEstadoNew != null) {
                idEstadoNew = em.getReference(idEstadoNew.getClass(), idEstadoNew.getIdEstado());
                pagos.setIdEstado(idEstadoNew);
            }
            if (idTipoPagoNew != null) {
                idTipoPagoNew = em.getReference(idTipoPagoNew.getClass(), idTipoPagoNew.getIdtipoPago());
                pagos.setIdTipoPago(idTipoPagoNew);
            }
            pagos = em.merge(pagos);
            if (idEmpresasOld != null && !idEmpresasOld.equals(idEmpresasNew)) {
                idEmpresasOld.getPagosCollection().remove(pagos);
                idEmpresasOld = em.merge(idEmpresasOld);
            }
            if (idEmpresasNew != null && !idEmpresasNew.equals(idEmpresasOld)) {
                idEmpresasNew.getPagosCollection().add(pagos);
                idEmpresasNew = em.merge(idEmpresasNew);
            }
            if (idEstadoOld != null && !idEstadoOld.equals(idEstadoNew)) {
                idEstadoOld.getPagosCollection().remove(pagos);
                idEstadoOld = em.merge(idEstadoOld);
            }
            if (idEstadoNew != null && !idEstadoNew.equals(idEstadoOld)) {
                idEstadoNew.getPagosCollection().add(pagos);
                idEstadoNew = em.merge(idEstadoNew);
            }
            if (idTipoPagoOld != null && !idTipoPagoOld.equals(idTipoPagoNew)) {
                idTipoPagoOld.getPagosCollection().remove(pagos);
                idTipoPagoOld = em.merge(idTipoPagoOld);
            }
            if (idTipoPagoNew != null && !idTipoPagoNew.equals(idTipoPagoOld)) {
                idTipoPagoNew.getPagosCollection().add(pagos);
                idTipoPagoNew = em.merge(idTipoPagoNew);
            }
            //em.getTransaction().commit();
        } catch (Exception ex) {
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                Integer id = pagos.getIdPago();
                if (findPagos(id,em) == null) {
                    throw new NonexistentEntityException("The pagos with id " + id + " no longer exists.");
                }
            }
            throw ex;
        }

    }

    public void destroy(Integer id,EntityManager em1) throws NonexistentEntityException, Exception {
        EntityManager em = null;
        try {
            em = em1;
            //em.getTransaction().begin();
            Pagos pagos;
            try {
                pagos = em.getReference(Pagos.class, id);
                pagos.getIdPago();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("The pagos with id " + id + " no longer exists.", enfe);
            }
            Empresas idEmpresas = pagos.getIdEmpresas();
            if (idEmpresas != null) {
                idEmpresas.getPagosCollection().remove(pagos);
                idEmpresas = em.merge(idEmpresas);
            }
            Estado idEstado = pagos.getIdEstado();
            if (idEstado != null) {
                idEstado.getPagosCollection().remove(pagos);
                idEstado = em.merge(idEstado);
            }
            Tipopago idTipoPago = pagos.getIdTipoPago();
            if (idTipoPago != null) {
                idTipoPago.getPagosCollection().remove(pagos);
                idTipoPago = em.merge(idTipoPago);
            }
            em.remove(pagos);
            //em.getTransaction().commit();
        } catch(Exception ex){
            throw ex;
        }
    }

    public List<Pagos> findPagosEntities(EntityManager em1) throws Exception {
        return findPagosEntities(true, -1, -1,em1);
    }

    public List<Pagos> findPagosEntities(int maxResults, int firstResult,EntityManager em1) throws Exception {
        return findPagosEntities(false, maxResults, firstResult,em1);
    }

    private List<Pagos> findPagosEntities(boolean all, int maxResults, int firstResult,EntityManager em1) throws Exception {
        EntityManager em = em1;
        try {
            Query q = em.createQuery("select object(o) from Pagos as o");
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } catch(Exception ex){
            throw ex;
        }
    }

    public Pagos findPagos(Integer id,EntityManager em1) throws Exception {
        EntityManager em = em1;
        try {
            return em.find(Pagos.class, id);
        } catch(Exception ex){
            throw ex;
        }
    }

    public int getPagosCount(EntityManager em1) throws Exception {
        EntityManager em = em1;
        try {
            Query q = em.createQuery("select count(o) from Pagos as o");
            return ((Long) q.getSingleResult()).intValue();
        } catch(Exception ex){
            throw ex;
        }
    }


    public List<Pagos> BuscarPorEmpresa(String idEm, EntityManager em1) {

       EntityManager em = em1;
       Query query = em.createNamedQuery("Pagos.findByidEmpresa");
       query.setParameter("idempresa", idEm);

       return (List<Pagos>) query.getResultList();
    }


       public List<Pagos> BuscarPorEstado(Estado idestado, EntityManager em1) {

       EntityManager em = em1;
       Query query = em.createNamedQuery("Pagos.findByEstado");
       query.setParameter("idestado", idestado);

       return (List<Pagos>) query.getResultList();
    }

       public List<Pagos> BuscarPorEstadoyTipo(Estado idestado,Tipopago idtipo, EntityManager em1) {

       EntityManager em = em1;
       Query query = em.createNamedQuery("Pagos.findByEstadoyTipo");
       query.setParameter("idestado", idestado);
       query.setParameter("idtipopago", idtipo);

       return (List<Pagos>) query.getResultList();
    }

}
